package com.yunfeisoft.common.base;

import com.yunfeisoft.common.base.BaseModel;

import java.io.Serializable;
import java.util.List;

public interface BaseDao<T extends BaseModel, PK extends Serializable>{
	
	/**
	 * 判断某一字段是否重复
	 * @param id 实体id
	 * @param filedValue 字段值
	 * @param fieldName 字段名称
	 * @return
	 */
	//public boolean isDuplicateField(PK id, Object filedValue, String fieldName);
	
	/**
	 * <p>Description: 添加实体</p>
	 * @param t 实体对象
	 */
	public int insert(T t);

	/**
	 * <p>Description: 批量添加实体</p>
	 * @param list 实体对象列表
	 */
	public int batchInsert(final List<T> list);

	/**
	 * <p>Description: 更新实体，字段值为null的不更新</p>
	 * @param t 实体对象
	 */
	public int update(T t);

	/**
	 * <p>Description: 更新实体</p>
	 * @param t 实体对象
	 */
	public int updateForce(T t);

	/**
	 * <p>Description: 根据id删除实体</p>
	 * @param id 实体id值
	 */
	public int delete(PK id);

	/**
	 * <p>Description: 批量删除实体</p>
	 * @param ids 实体id值数组
	 */
	public int delete(PK[] ids);

	/**
	 * <p>Description: 按条件查询实体列表</p>
	 * @param wb QueryCondition对象
	 * @return 实体列表
	 */
	//public List<T> query(QueryCondition wb);

	/**
	 * <p>Description: 按条件查询实体数量</p>
	 * @param wb QueryCondition对象
	 * @return 实体数量
	 */
	//public int count(QueryCondition wb);

	/**
	 * <p>Description: 根据id查询实体</p>
	 * @param id 实体id值
	 * @return 实体对象
	 */
	public T load(PK id);

	/**
	 * <p>Description: 按条件删除实体</p>
	 * @param wb QueryCondition对象
	 */
	//public int deleteByCondition(QueryCondition wb);

	/**
	 * <p>Description: 分页查询</p>
	 * @param wb QueryCondition对象
	 * @return
	 */
	//public Page<T> queryPage(QueryCondition wb);
}
